 
#include <iostream>
#include <stack>
using namespace std;


stack<int> H[4];

int contador = 0;
void hanoi(int discos, int a,int b, int c);
void dibujar();
void llenar(int discos);



int main(){
	int discos;
	
	cout << "ingrese la cantidad de discos" << endl;
	cin >> discos;
	
	
	llenar(discos);
	
	hanoi(discos,0,1,2);
	
	cout <<endl<< "Contador " << contador << endl;
	
	
return 0;
}



void llenar(int discos){
	while(discos>0){
		H[0].push(discos);
		discos--;
	}
}



void hanoi(int discos, int a,int b, int c){

int v;
if(discos==2){			//SACO DEL 1, PONGO EN EL 2, SACO DEL 1, PONGO EN EL 3, SACO DEL 2, PONGO EN EL 3
		
		H[b].push(H[a].top());
		H[a].pop();	
		contador++;
		dibujar();	
	
		H[c].push(H[a].top());
		H[a].pop();
		contador++;
		dibujar();

		H[c].push(H[b].top());
		H[b].pop();
		contador++;
		dibujar();
	}
	else{			

		hanoi(discos-1,a,c,b);
		H[c].push(H[a].top());
		H[a].pop();
		dibujar();
		contador++;
		hanoi(discos-1,b,a,c);
}

}






void dibujar(){
	cout << endl;
	for(int i = 0;i<3;i++){
	cout << "*" << i+1 << ": ";
		while (!H[i].empty())
		{
		cout << " " << H[i].top();
		H[3].push(H[i].top());
		H[i].pop();
		}

		cout << endl;

		while (!H[3].empty())
		{
		H[i].push(H[3].top());
		H[3].pop();
		}		
	}	
}